package practice.oop.staticstudy;

public class Aoo {

    public Aoo(){
        System.out.println("父类构造函数");
    }

    {
        System.out.println("父类构造代码块001");
    }
    {
        System.out.println("父类构造代码块002");
    }

    static {
        System.out.println("父类静态代码块");
    }

    public void show(){
        System.out.println("父类普通方法");
    }

    /*
    一: 静态方法可以被重写吗?
    静态的⽅法可以被继承，但是不能重写。如果⽗类中有⼀个静态的⽅法，⼦类也有⼀个完全一样的方法，那么该⼦类的⽅法会把⽗类的⽅法隐藏，⽽不是重写。
    通俗的讲就是⽗类的⽅法和⼦类的⽅法是两个没有关系的⽅法，具体调⽤哪⼀个⽅法是看是哪个对象的引⽤；这种⽗⼦类⽅法也不在存在多态的性质。
     */
    /*
    为什么不能被重写?
       重写的目的在于父类引用可以根据子类对象的运行时实际类型不同而调用不同实现代码，从而表现出多态。
       并且，静态方法无需创建对象即可使用，而重写的方法发挥作用，需要父类引用，和（不同的）子类对象。
     */
    public static void test(){
        System.out.println("父类静态方法");  //静态方法不能被重写，子类有同名的静态方法时，那么父类的静态方法会被隐藏，多态时调用静态方法时会调用父类的
    }

    public static void main(String[] args) {
        Aoo aoo = new Aoo();
        aoo.show(); //父类静态代码块 父类构造代码块001 父类构造代码块002 父类构造方法 父类普通方法
        System.out.println("-----");
        Aoo aoo1 = new Aoo();
        aoo1.show(); //父类构造代码块001 父类构造代码块002 父类构造方法 父类普通方法
    }
}
